home *** CD-ROM | disk | FTP | other *** search
- public abstract class MathFP {
- private static int _fbits = 24;
- private static int _digits = 8;
- private static long _one = 16777216L;
- private static long _fmask = 16777215L;
- private static long _dmul = 100000000L;
- private static long _flt = 0L;
- private static long _pi = 52707178L;
- // $FF: renamed from: e long[]
- private static long[] field_0;
- // $FF: renamed from: PI long
- public static long field_1;
- // $FF: renamed from: E long
- public static long field_2;
- public static final long MAX_VALUE = Long.MAX_VALUE;
- public static final long MIN_VALUE = -9223372036854775807L;
-
- static {
- field_0 = new long[]{_one, 45605201L, 123967790L, 336979391L, 916004956L};
- field_1 = _pi;
- field_2 = field_0[1];
- }
-
- public static long abs(long var0) {
- return var0 < 0L ? -var0 : var0;
- }
-
- public static long acos(long var0) {
- return field_1 / 2L - asin(var0);
- }
-
- public static long add(long var0, long var2) {
- return var0 + var2;
- }
-
- public static long asin(long var0) {
- if (abs(var0) > _one) {
- throw new ArithmeticException("Bad Input");
- } else {
- boolean var2 = var0 < 0L;
- var0 = abs(var0);
- long var3 = mul(mul(mul(mul((long)(145103 >> (int)_flt), var0) - (long)(599880 >> (int)_flt), var0) + (long)(1420468 >> (int)_flt), var0) - (long)(3592413 >> (int)_flt), var0) + (long)(26353447 >> (int)_flt);
- long var5 = field_1 / 2L - mul(sqrt(_one - var0), var3);
- return var2 ? -var5 : var5;
- }
- }
-
- public static long atan(long var0) {
- return asin(div(var0, sqrt(_one + mul(var0, var0))));
- }
-
- public static long atan2(long var0, long var2) {
- long var4 = 0L;
- if (var2 > 0L) {
- var4 = atan(div(var0, var2));
- } else if (var2 < 0L) {
- var4 = (var2 < 0L ? -field_1 : field_1) - atan(abs(div(var0, var2)));
- } else {
- if (var2 == 0L && var0 == 0L) {
- throw new ArithmeticException("Bad Input");
- }
-
- var4 = (var0 < 0L ? -field_1 : field_1) / 2L;
- }
-
- return var4;
- }
-
- public static long convert(long var0, int var2) {
- long var3 = (long)(var0 < 0L ? -1 : 1);
- if (abs((long)var2) < 25L) {
- if (_fbits < var2) {
- var0 = var0 + var3 * (1L << (var2 - _fbits >> 1)) >> var2 - _fbits;
- } else {
- var0 <<= _fbits - var2;
- }
- }
-
- return var0;
- }
-
- public static long cos(long var0) {
- return sin(field_1 / 2L - var0);
- }
-
- public static long cot(long var0) {
- return div(cos(var0), sin(var0));
- }
-
- public static long div(long var0, long var2) {
- boolean var4 = false;
- int var5 = _fbits;
- if (var2 == _one) {
- return var0;
- } else if ((var2 & _fmask) == 0L) {
- return var0 / (var2 >> var5);
- } else {
- if (var0 < 0L && var2 > 0L || var0 > 0L && var2 < 0L) {
- var4 = true;
- }
-
- if (var0 < 0L) {
- var0 = -var0;
- }
-
- if (var2 < 0L) {
- var2 = -var2;
- }
-
- while(max(var0, var2) >= 1L << 63 - var5) {
- var0 >>= 1;
- var2 >>= 1;
- --var5;
- }
-
- long var6 = (var0 << var5) / var2 << _fbits - var5;
- return var4 ? -var6 : var6;
- }
- }
-
- public static long exp(long var0) {
- if (var0 == 0L) {
- return _one;
- } else {
- boolean var2 = var0 < 0L;
- var0 = abs(var0);
- int var3 = (int)(var0 >> _fbits);
- long var4 = _one;
-
- for(int var6 = 0; var6 < var3 / 4; ++var6) {
- var4 = mul(var4, field_0[4] >> (int)_flt);
- }
-
- if (var3 % 4 > 0) {
- var4 = mul(var4, field_0[var3 % 4] >> (int)_flt);
- }
-
- var0 &= _fmask;
- if (var0 > 0L) {
- long var7 = _one;
- long var9 = 0L;
- long var11 = 1L;
-
- for(int var13 = 0; var13 < 16; ++var13) {
- var9 += var7 / var11;
- var7 = mul(var7, var0);
- var11 *= (long)(var13 + 1);
- if (var11 > var7 || var7 <= 0L || var11 <= 0L) {
- break;
- }
- }
-
- var4 = mul(var4, var9);
- }
-
- if (var2) {
- var4 = div(_one, var4);
- }
-
- return var4;
- }
- }
-
- public static int getPrecision() {
- return _fbits;
- }
-
- public static long log(long var0) {
- // $FF: Couldn't be decompiled
- }
-
- public static long max(long var0, long var2) {
- return var0 < var2 ? var2 : var0;
- }
-
- public static long min(long var0, long var2) {
- return var2 < var0 ? var2 : var0;
- }
-
- public static long mul(long var0, long var2) {
- boolean var4 = false;
- int var5 = _fbits;
- long var6 = _fmask;
- if ((var0 & var6) == 0L) {
- return (var0 >> var5) * var2;
- } else if ((var2 & var6) == 0L) {
- return var0 * (var2 >> var5);
- } else {
- if (var0 < 0L && var2 > 0L || var0 > 0L && var2 < 0L) {
- var4 = true;
- }
-
- if (var0 < 0L) {
- var0 = -var0;
- }
-
- if (var2 < 0L) {
- var2 = -var2;
- }
-
- while(max(var0, var2) >= 1L << 63 - var5) {
- var0 >>= 1;
- var2 >>= 1;
- var6 >>= 1;
- --var5;
- }
-
- long var8 = (var0 >> var5) * (var2 >> var5) << var5;
- long var10 = (var0 & var6) * (var2 & var6) >> var5;
- var10 += (var0 & ~var6) * (var2 & var6) >> var5;
- var8 = var8 + var10 + ((var0 & var6) * (var2 & ~var6) >> var5) << _fbits - var5;
- if (var8 < 0L) {
- throw new ArithmeticException("Overflow");
- } else {
- return var4 ? -var8 : var8;
- }
- }
- }
-
- public static long pow(long var0, long var2) {
- boolean var4 = var2 < 0L;
- long var5 = _one;
- var2 = abs(var2);
-
- for(int var7 = (int)var2 >> _fbits; var7-- > 0; var5 = mul(var5, var0)) {
- }
-
- if (var5 < 0L) {
- throw new ArithmeticException("Overflow");
- } else {
- if (var0 != 0L) {
- var5 = mul(var5, exp(mul(log(var0), var2 & _fmask)));
- } else {
- var5 = 0L;
- }
-
- return var4 ? div(_one, var5) : var5;
- }
- }
-
- public static long round(long var0, int var2) {
- long var3 = 10L;
-
- for(int var5 = 0; var5 < var2; ++var5) {
- var3 *= 10L;
- }
-
- var3 = div(toFP(5L), toFP(var3));
- if (var0 < 0L) {
- var3 = -var3;
- }
-
- return var0 + var3;
- }
-
- public static int setPrecision(int var0) {
- if (var0 <= 24 && var0 >= 0) {
- _fbits = var0;
- _one = 1L << var0;
- _flt = (long)(24 - var0);
- _digits = 0;
- _dmul = 1L;
- _fmask = _one - 1L;
- field_1 = _pi >> (int)_flt;
- field_2 = field_0[1] >> (int)_flt;
-
- for(long var1 = _one; var1 != 0L; _dmul *= 10L) {
- var1 /= 10L;
- ++_digits;
- }
-
- return _digits;
- } else {
- return _digits;
- }
- }
-
- public static long sin(long var0) {
- long var2 = mul(var0, div(toFP(180L), field_1));
- var2 %= toFP(360L);
- if (var2 < 0L) {
- var2 += toFP(360L);
- }
-
- long var4 = var2;
- if (var2 >= toFP(90L) && var2 < toFP(270L)) {
- var4 = toFP(180L) - var2;
- } else if (var2 >= toFP(270L) && var2 < toFP(360L)) {
- var4 = -(toFP(360L) - var2);
- }
-
- long var6 = var4 / 90L;
- long var8 = mul(var6, var6);
- long var10 = mul(mul(mul(mul(-73190L >> (int)_flt, var8) + (1333581L >> (int)_flt), var8) - (10836755L >> (int)_flt), var8) + (long)(26353564 >> (int)_flt), var6);
- return var10;
- }
-
- public static long sqrt(long var0) {
- return sqrt(var0, 24);
- }
-
- public static long sqrt(long var0, int var2) {
- if (var0 < 0L) {
- throw new ArithmeticException("Bad Input");
- } else if (var0 == 0L) {
- return 0L;
- } else {
- long var3 = var0 + _one >> 1;
-
- for(int var5 = 0; var5 < var2; ++var5) {
- var3 = var3 + div(var0, var3) >> 1;
- }
-
- if (var3 < 0L) {
- throw new ArithmeticException("Overflow");
- } else {
- return var3;
- }
- }
- }
-
- public static long sub(long var0, long var2) {
- return var0 - var2;
- }
-
- public static long tan(long var0) {
- return div(sin(var0), cos(var0));
- }
-
- public static long toFP(long var0) {
- return var0 << _fbits;
- }
-
- public static long toFP(String var0) {
- byte var1 = 0;
- if (var0.charAt(0) == '-') {
- var1 = 1;
- }
-
- String var2 = "-1";
- int var3 = var0.indexOf(46);
- if (var3 >= 0) {
- for(var2 = var0.substring(var3 + 1, var0.length()); var2.length() < _digits; var2 = var2 + "0") {
- }
-
- if (var2.length() > _digits) {
- var2 = var2.substring(0, _digits);
- }
- } else {
- var3 = var0.length();
- }
-
- long var4 = 0L;
- if (var1 != var3) {
- var4 = Long.parseLong(var0.substring(var1, var3));
- }
-
- long var6 = Long.parseLong(var2) + 1L;
- long var8 = (var4 << _fbits) + (var6 << _fbits) / _dmul;
- if (var1 == 1) {
- var8 = -var8;
- }
-
- return var8;
- }
-
- public static long toLong(long var0) {
- var0 = round(var0, 0);
- return var0 >> _fbits;
- }
-
- public static String toString(long var0) {
- boolean var2 = false;
- if (var0 < 0L) {
- var2 = true;
- var0 = -var0;
- }
-
- long var3 = var0 >> _fbits;
- long var5 = _dmul * (var0 & _fmask) >> _fbits;
-
- String var7;
- for(var7 = Long.toString(var5); var7.length() < _digits; var7 = "0" + var7) {
- }
-
- return (var2 ? "-" : "") + Long.toString(var3) + "." + var7;
- }
-
- public static String toString(long var0, int var2) {
- if (var2 > _digits) {
- var2 = _digits;
- }
-
- String var3 = toString(round(var0, var2));
- return var3.substring(0, var3.length() - _digits + var2);
- }
- }
-